oo::class create Fundamental {
    superclass Language
    
    # Escape Char
    method getEscapeChar {} {}
    
    # Quote
    method getQuoteTag {args} {}

    # Indent
    method getIndentChar {} {}
    method getUnindentChar {} {}
    method getTabSpacing {} { return [string repeat " " 4]}
    method getIndentContinueSpacing {} {}
    method updateIndentByTabEvent {textWidget index} {
        # 1 tab == 2 spaces
        [string trimleft $textWidget _] insert \
            "$index linestart +[my getLineHeadSpacing $textWidget $index]c" \
            [my getTabSpacing]
    }
    method updateIndent {textWidget index} {
        # indent same with previous line
        [string trimleft $textWidget _] replace "$index linestart" \
            "$index linestart +[my getLineHeadSpacing $textWidget $index]c" \
            [string repeat " " [my getLineHeadSpacing $textWidget $index-1l]]
    }

    # Varible
    method getVariableRelatedRegexp {} {}
    method isVariable? {word} { return 0 }
    method isVariableDefinition? {prevWord curWord} { return 0 }
    method isProcDefinition? {prevWord curWord} { return 0 }

    # Keyword
    method getKeyWordGroup1 {} {}
    method getKeyWordGroup2 {} {}
    method getKeyWordGroup3 {} {}
    #  ...

    # Folder
    method getBlockHead {textWidget index} {}
    method getBlockEnd {textWidget index} {}

    # Comment
    method updateComment {textWidget from to} {}
}